PL/SQL Collections

Database Tutorials - পিএল/এসকিউএল (PL/SQL)
217
217

PL/SQL Collections হল ডেটা স্ট্রাকচার, যা একাধিক মান সংরক্ষণ করতে সক্ষম। এগুলি অ্যারের মতো কাজ করে, যেখানে একাধিক মান একই ধরনের ডেটা টাইপের হতে পারে। PL/SQL-এ তিন ধরনের collection রয়েছে:

  1. Associative Arrays (Index-By Tables)
  2. Nested Tables
  3. VARRAYs (Variable-Size Arrays)

এই Collections গুলি আপনাকে একাধিক ডেটা আইটেম একই সময়ে প্রক্রিয়া করার সুবিধা দেয়। প্রতিটি টাইপের Collection বিভিন্ন ধরনের ডেটার সাথে কাজ করতে সহায়তা করে এবং উপযুক্ত কৌশল এবং পারফরমেন্স অপটিমাইজেশন প্রদান করে।


১. Associative Arrays (Index-By Tables)

Associative Arrays হল এমন একটি Collection যা একটি নির্দিষ্ট কী দ্বারা পরিচালিত হয়। এটি এক ধরনের অ্যারে, যেখানে আপনি একটি কি (সাধারণত, একটি সংখ্যা বা স্ট্রিং) ব্যবহার করে ভ্যালু অ্যাক্সেস করেন। এই ধরনের অ্যারে ইনডেক্সের মাধ্যমে উপাদানগুলিকে সংরক্ষণ করে এবং আপনাকে নির্দিষ্ট ইনডেক্স বা কী দ্বারা অ্যাক্সেস করার সুবিধা দেয়।

Syntax:

DECLARE
   TYPE array_type IS TABLE OF datatype INDEX BY BINARY_INTEGER;
   my_array array_type;
BEGIN
   -- Adding elements
   my_array(1) := value1;
   my_array(2) := value2;
   
   -- Accessing elements
   DBMS_OUTPUT.PUT_LINE(my_array(1));
END;

উদাহরণ:

DECLARE
   TYPE emp_array IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;
   emp_names emp_array;
BEGIN
   emp_names(1) := 'John';
   emp_names(2) := 'Jane';
   emp_names(3) := 'Alice';
   
   DBMS_OUTPUT.PUT_LINE('Employee 1: ' || emp_names(1));
   DBMS_OUTPUT.PUT_LINE('Employee 2: ' || emp_names(2));
   DBMS_OUTPUT.PUT_LINE('Employee 3: ' || emp_names(3));
END;

Output:

Employee 1: John
Employee 2: Jane
Employee 3: Alice

২. Nested Tables

Nested Tables হল একটি Collection যা একটি টেবিলের মতো কাজ করে, যেখানে প্রতিটি উপাদান একটি নির্দিষ্ট ডেটা টাইপের হতে পারে। Nested Table সাধারণত ডেটাবেস টেবিলের কলামের মতো কাজ করে, যেখানে একাধিক মান সংরক্ষণ করা যায়। তবে, Nested Table একটি পূর্ণাঙ্গ collection এবং এটি স্থায়ীভাবে ডেটাবেসে সংরক্ষণ করা যেতে পারে।

Syntax:

DECLARE
   TYPE table_type IS TABLE OF datatype;
   my_table table_type;
BEGIN
   -- Adding elements
   my_table := table_type(value1, value2, value3);
   
   -- Accessing elements
   FOR i IN 1..my_table.COUNT LOOP
      DBMS_OUTPUT.PUT_LINE(my_table(i));
   END LOOP;
END;

উদাহরণ:

DECLARE
   TYPE number_table IS TABLE OF NUMBER;
   num_list number_table;
BEGIN
   num_list := number_table(10, 20, 30, 40, 50);
   
   FOR i IN 1..num_list.COUNT LOOP
      DBMS_OUTPUT.PUT_LINE('Number: ' || num_list(i));
   END LOOP;
END;

Output:

Number: 10
Number: 20
Number: 30
Number: 40
Number: 50

৩. VARRAYs (Variable-Size Arrays)

VARRAYs হল একটি নির্দিষ্ট সাইজের Collection যা একাধিক ডেটা আইটেম ধারণ করতে পারে। তবে, VARRAYs-এ একটি সীমিত সংখ্যা থাকতে পারে (যদিও এটি নির্দিষ্ট সংখ্যার মধ্যে থাকতে পারে)। VARRAY সাধারণত প্যাকেজে বা ডেটাবেসে ডেটা টাইপের সাথে সংযুক্ত থাকে। এটি একাধিক উপাদান ধারণ করতে পারে, তবে তার আয়তন আগে থেকেই নির্ধারিত থাকে।

Syntax:

DECLARE
   TYPE array_type IS VARRAY(size_limit) OF datatype;
   my_varray array_type;
BEGIN
   -- Adding elements
   my_varray := array_type(value1, value2, value3);
   
   -- Accessing elements
   FOR i IN 1..my_varray.COUNT LOOP
      DBMS_OUTPUT.PUT_LINE(my_varray(i));
   END LOOP;
END;

উদাহরণ:

DECLARE
   TYPE number_varray IS VARRAY(5) OF NUMBER;
   num_array number_varray;
BEGIN
   num_array := number_varray(1, 2, 3, 4, 5);
   
   FOR i IN 1..num_array.COUNT LOOP
      DBMS_OUTPUT.PUT_LINE('Element ' || i || ': ' || num_array(i));
   END LOOP;
END;

Output:

Element 1: 1
Element 2: 2
Element 3: 3
Element 4: 4
Element 5: 5

Collection Methods

PL/SQL-এ collections-এর কিছু গুরুত্বপূর্ণ মেথড রয়েছে, যেগুলি collections এর উপাদানগুলি পরিচালনা করতে ব্যবহৃত হয়।

1. EXTEND:

EXTEND মেথডটি collection-এ নতুন উপাদান যোগ করতে ব্যবহৃত হয়।

Syntax:

collection_name.EXTEND(n);

এটি n সংখ্যক উপাদান collection-এ যোগ করে।

2. DELETE:

DELETE মেথডটি collection থেকে নির্দিষ্ট উপাদান মুছে ফেলার জন্য ব্যবহৃত হয়।

Syntax:

collection_name.DELETE;

এটি পুরো collection পরিষ্কার করে দেয়।

3. EXISTS:

EXISTS মেথডটি collection-এর একটি নির্দিষ্ট ইনডেক্সে উপাদান আছে কিনা তা চেক করতে ব্যবহৃত হয়।

Syntax:

collection_name.EXISTS(index);

4. FIRST এবং LAST:

FIRST এবং LAST মেথডগুলি collection-এর প্রথম এবং শেষ ইনডেক্স রিটার্ন করে।

Syntax:

collection_name.FIRST;
collection_name.LAST;

PL/SQL Collection এর ব্যবহার:

  1. Efficiency: Collections ডেটা প্রসেসিংয়ের জন্য খুবই কার্যকরী, কারণ একাধিক মান সংরক্ষণ এবং অ্যাক্সেস করার জন্য একক স্টেটমেন্টের মধ্যে কাজ করা যায়।
  2. Dynamic Operations: Collections দিয়ে ডাইনামিক ডেটা অ্যাক্সেস এবং ম্যানিপুলেশন করা যায়, যা বিভিন্ন ধরনের অ্যাপ্লিকেশন ডেভেলপমেন্টে ব্যবহার করা হয়।

সংক্ষেপে:

PL/SQL-এর collections আপনাকে একাধিক ডেটা আইটেম সংরক্ষণ ও পরিচালনা করার জন্য বিভিন্ন পদ্ধতি প্রদান করে। তিনটি প্রধান ধরনের collection রয়েছে: Associative Arrays, Nested Tables, এবং VARRAYs। এদের প্রতিটির আলাদা ব্যবহার এবং বৈশিষ্ট্য রয়েছে, এবং এগুলি ডেটা ম্যানিপুলেশনের জন্য খুবই গুরুত্বপূর্ণ।

Content added By

Collections কি এবং কেন প্রয়োজন?

131
131

Collections হল PL/SQL-এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা একাধিক মান বা ডেটা একত্রে সংরক্ষণ এবং পরিচালনা করার জন্য ব্যবহৃত হয়। এটি বিশেষভাবে উপকারী যখন আপনাকে একাধিক রেকর্ড বা মান একত্রে কাজ করতে হয়।

PL/SQL-এ Collections তিন ধরনের হতে পারে:

  1. Associative Arrays (Index-By Tables)
  2. Nested Tables
  3. VARRAYs (Variable-Size Arrays)

প্রতিটি প্রকারের Collection এর আলাদা বৈশিষ্ট্য ও ব্যবহার রয়েছে।


১. Associative Arrays (Index-By Tables)

Associative Arrays হল একটি collection যা ইন্ডেক্স (key) এর মাধ্যমে ডেটা অ্যাক্সেস করতে পারে, এবং এটি এমনভাবে ডিজাইন করা যাতে এর ইনডেক্স পজিশন নম্বর হতে পারে না, বরং এটি যেকোনো ডেটা টাইপ হতে পারে (যেমন, সংখ্যা, স্ট্রিং ইত্যাদি)। এটি একাধিক মান সংরক্ষণ করতে ব্যবহৃত হয় যেখানে ইনডেক্সটি একটি কাস্টম মান হতে পারে।

Associative Arrays এর উদাহরণ:

DECLARE
   TYPE emp_table_type IS TABLE OF employees.employee_name%TYPE INDEX BY VARCHAR2(10);
   emp_names emp_table_type;
BEGIN
   emp_names('E101') := 'Alice';
   emp_names('E102') := 'Bob';
   emp_names('E103') := 'Charlie';
   
   DBMS_OUTPUT.PUT_LINE('Employee with ID E102: ' || emp_names('E102'));
END;

এখানে, emp_names একটি Associative Array, যেখানে E101, E102, ইত্যাদি হল ইনডেক্স এবং তাদের মান হল সংশ্লিষ্ট কর্মচারীদের নাম।


২. Nested Tables

Nested Tables একটি collection যা একধরণের সারণির মতো কাজ করে। এটি একাধিক মান সংরক্ষণ করতে সক্ষম, তবে এগুলি একটি ধারাবাহিক একক সারণির মধ্যে স্টোর হয়। Nested Tables সাধারণত ডাটাবেস টেবিলের মতোই আচরণ করে এবং এগুলি পুনরুদ্ধার ও আপডেট করার জন্য SQL ব্যবহার করা যায়।

Nested Tables এর উদাহরণ:

DECLARE
   TYPE number_table IS TABLE OF NUMBER;
   num_list number_table := number_table(10, 20, 30, 40);
BEGIN
   FOR i IN 1..num_list.COUNT LOOP
      DBMS_OUTPUT.PUT_LINE('Number: ' || num_list(i));
   END LOOP;
END;

এখানে, num_list একটি Nested Table যা একাধিক সংখ্যা ধারণ করছে, এবং FOR লুপের মাধ্যমে সেগুলি একে একে আউটপুট হিসেবে প্রদর্শিত হচ্ছে।


৩. VARRAYs (Variable-Size Arrays)

VARRAYs (Variable-size arrays) হল একটি collection যেখানে ফিক্সড সংখ্যক উপাদান থাকে, এবং এর আকার নির্দিষ্ট সংখ্যার বেশি হলে ডেটা স্বয়ংক্রিয়ভাবে প্রসারিত হতে পারে। VARRAYs সাধারণত ছোট আকারের বা সীমিত পরিসরের জন্য ব্যবহার করা হয়।

VARRAYs এর উদাহরণ:

DECLARE
   TYPE num_varray IS VARRAY(5) OF NUMBER;
   num_list num_varray := num_varray(10, 20, 30);
BEGIN
   FOR i IN 1..num_list.LIMIT LOOP
      DBMS_OUTPUT.PUT_LINE('Number: ' || num_list(i));
   END LOOP;
END;

এখানে, num_list একটি VARRAY যা ৫টি সংখ্যার মধ্যে সীমাবদ্ধ।


Collections কেন প্রয়োজন?

PL/SQL-এ Collections ব্যবহারের অনেক কারণ এবং সুবিধা রয়েছে, যা বিভিন্ন পরিস্থিতিতে অত্যন্ত কার্যকরী।

1. একাধিক মান সংরক্ষণ:

Collections আপনাকে একাধিক ডেটা মান একত্রে সংরক্ষণ করতে সাহায্য করে। এটি এমন পরিস্থিতিতে ব্যবহৃত হয় যেখানে আপনি একাধিক রেকর্ড বা ভ্যালু সংরক্ষণ করতে চান, যেমন লুপের ভিতরে একাধিক মান রাখতে।

2. ডেটা ম্যানিপুলেশন:

Collections ব্যবহার করে আপনি একাধিক ডেটা মানের উপর একযোগে কাজ করতে পারেন, যেমন একাধিক আইটেমকে ফিল্টার করা, পরিসংখ্যান হিসাব করা, অথবা সমষ্টি বের করা।

3. সঞ্চালন প্রক্রিয়া সহজ করা:

ব্যাপক ডেটা ম্যানিপুলেশন বা কার্যকরী কর্মধারা সম্পাদন করতে Collections সহায়ক। যেমন, একাধিক ডেটা ফেচ করা হলে, সেটি একটি Collection এ সঞ্চিত করা হয় এবং পরে তার উপরে কার্যক্রম পরিচালনা করা হয়।

4. কর্মক্ষমতা উন্নত করা:

Collections ব্যবহার করে একাধিক রেকর্ড একত্রে প্রক্রিয়া করা যেতে পারে, যা কার্যক্ষমতা বাড়াতে সাহায্য করে। উদাহরণস্বরূপ, BULK COLLECT এবং FORALL ব্যবহার করা যেতে পারে Collections-এ ডেটা দ্রুতভাবে হ্যান্ডেল করতে।

5. কোড সিম্পলিফিকেশন:

Collections কোডের জটিলতা কমিয়ে আনতে সহায়তা করে, কারণ এতে একাধিক ভেরিয়েবল বা তত্ত্ব একসাথে পরিচালনা করা সহজ হয়ে যায়।

6. ফ্লেক্সিবিলিটি:

Collections বিভিন্ন ধরনের ডেটা ধারণ করতে সক্ষম (যেমন সংখ্যা, স্ট্রিং, অবজেক্ট ইত্যাদি), এবং এগুলির আকার এবং ধারণ ক্ষমতা ডাইনামিকভাবে পরিবর্তিত হতে পারে।


Collections এর ব্যবহারী উদাহরণ

  1. একাধিক রেকর্ড প্রক্রিয়া করা:
DECLARE
   TYPE emp_table IS TABLE OF employees.employee_name%TYPE;
   emp_names emp_table;
BEGIN
   -- ডেটা ফেচ করা
   SELECT employee_name
   BULK COLLECT INTO emp_names
   FROM employees
   WHERE department_id = 10;

   -- প্রতিটি কর্মচারীর নাম আউটপুট করা
   FOR i IN 1..emp_names.COUNT LOOP
      DBMS_OUTPUT.PUT_LINE('Employee Name: ' || emp_names(i));
   END LOOP;
END;

এখানে, BULK COLLECT ব্যবহৃত হয়েছে যাতে একাধিক কর্মচারীর নাম একসাথে emp_names collection-এ সংরক্ষণ করা যায়, এবং পরে সেই ডেটার উপর লুপ চালিয়ে তাদের আউটপুট দেখানো হয়েছে।

  1. গ্রুপিং বা সোজানো (Sorting) করা:
DECLARE
   TYPE emp_table IS TABLE OF employees.employee_name%TYPE;
   emp_names emp_table;
BEGIN
   -- ডেটা ফেচ করা
   SELECT employee_name
   BULK COLLECT INTO emp_names
   FROM employees
   WHERE department_id = 10
   ORDER BY employee_name;

   -- নামগুলির তালিকা আউটপুট করা
   FOR i IN 1..emp_names.COUNT LOOP
      DBMS_OUTPUT.PUT_LINE('Employee Name: ' || emp_names(i));
   END LOOP;
END;

এখানে, ORDER BY দিয়ে আউটপুটের ডেটা অর্ডার করা হয়েছে এবং তা emp_names collection-এ সংরক্ষণ করা হয়েছে।


সারাংশ:

  • Collections হল PL/SQL-এ একাধিক মান বা ডেটা একত্রে সংরক্ষণ এবং পরিচালনা করার একটি শক্তিশালী বৈশিষ্ট্য।
  • এটি আপনাকে বিভিন্ন ডেটা প্রক্রিয়াকরণ, ম্যানিপুলেশন, এবং কার্যক্ষমতা বৃদ্ধি করতে সহায়তা করে।
  • PL/SQL-এ তিন ধরনের Collections রয়েছে: Associative Arrays, Nested Tables, এবং VARRAYs
  • Collections ব্যবহার করে আপনি একাধিক রেকর্ড দ্রুত এবং কার্যকরভাবে প্রক্রিয়া করতে পারেন, এবং কোডের জটিলতা কমাতে সাহায্য পেতে পারেন।
Content added By

Associative Arrays (Index-By Tables)

206
206

PL/SQL এ Associative Arrays (যাকে আগে Index-By Tables বলা হত) একটি বিশেষ ধরনের Collection Type যা মূলত ডেটাবেসের মধ্যে ডেটাকে key-value pair আকারে সংরক্ষণ করার জন্য ব্যবহৃত হয়। এই ধরনের অ্যারের মধ্যে ডেটা সংরক্ষণ করার সময় আপনি একটি কাস্টম ইনডেক্স ব্যবহার করতে পারেন, যেমন একটি সংখ্যামূলক বা স্ট্রিং টাইপ ইনডেক্স।

Associative Arrays এর বৈশিষ্ট্য:

  • এটি Dynamic Size এর হয়, অর্থাৎ যখন প্রয়োজন হয় তখন নতুন এলিমেন্ট যুক্ত করা বা মুছে ফেলা যেতে পারে।
  • অ্যারে এলিমেন্টগুলোকে এক্সেস করা হয় তাদের Index বা Key এর মাধ্যমে।
  • Index গুলি সাধারণত Integer বা Varchar2 টাইপ হতে পারে।
  • এই অ্যারে গুলোর মধ্যে কোনো নির্দিষ্ট সীমা নেই, যতটুকু মেমরি রয়েছে ততটুকু আকার ধারণ করতে পারে।

Associative Array গঠন:

DECLARE
   -- Associative Array Declaration
   TYPE employee_array IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;
   employees employee_array;  -- Declare the array
BEGIN
   -- Inserting values into the associative array
   employees(1) := 'John Doe';
   employees(2) := 'Jane Smith';
   employees(3) := 'Robert Brown';

   -- Retrieving values from the associative array
   DBMS_OUTPUT.PUT_LINE('Employee 1: ' || employees(1));
   DBMS_OUTPUT.PUT_LINE('Employee 2: ' || employees(2));
   DBMS_OUTPUT.PUT_LINE('Employee 3: ' || employees(3));
END;

Associative Array এর ব্যবহার:

  1. Index (Key) দিয়ে ডেটা এক্সেস করা:
    • প্রতিটি এলিমেন্টের জন্য আপনি একটি নির্দিষ্ট Index ব্যবহার করে মান অ্যাক্সেস করতে পারেন। এখানে BINARY_INTEGER হল সেই টাইপ, যা একটি ইনডেক্স হিসেবে কাজ করবে।
  2. Dynamic Size:
    • Associative Array গুলি dynamic size ধারণ করে, তাই আপনি প্রয়োজনমতো যে কোন সংখ্যক এলিমেন্ট অ্যারে তে যোগ বা মুছে ফেলতে পারেন।
  3. Data Types:
    • এটি VARCHAR2, NUMBER সহ বিভিন্ন ডেটা টাইপ ধারণ করতে সক্ষম।

Associative Arrays (Index-By Tables) ব্যবহার করার সুবিধা:

  1. Memory Efficiency:
    • মেমোরির কার্যকর ব্যবহার নিশ্চিত করে। অ্যারে গুলি ডাইনামিক ভাবে বড় হতে পারে এবং ব্যবহারকারী শুধুমাত্র প্রয়োজনীয় ডেটা স্টোর করে রাখে।
  2. Fast Access:
    • Key ভিত্তিক এক্সেসের কারণে দ্রুত ডেটা অনুসন্ধান ও পরিচালনা করা সম্ভব। Index বা Key ব্যবহার করে দ্রুত ডেটা প্রাপ্তি করা যায়।
  3. No Size Limitation:
    • প্ল/এসকিউএল অ্যাসোসিয়েটিভ অ্যারে গুলি সাইজের দিক দিয়ে সীমাবদ্ধ নয়। এটি মেমরি ত্রুটি না হওয়া পর্যন্ত বাড়তে পারে।

Associative Array এর উন্নত উদাহরণ:

DECLARE
   -- Declare an associative array with varchar index
   TYPE employee_data IS TABLE OF VARCHAR2(100) INDEX BY VARCHAR2(20);
   employees employee_data;

BEGIN
   -- Assigning values to the array with string index
   employees('E101') := 'John Doe';
   employees('E102') := 'Jane Smith';
   employees('E103') := 'Robert Brown';

   -- Retrieving values from the associative array
   DBMS_OUTPUT.PUT_LINE('Employee E101: ' || employees('E101'));
   DBMS_OUTPUT.PUT_LINE('Employee E102: ' || employees('E102'));
   DBMS_OUTPUT.PUT_LINE('Employee E103: ' || employees('E103'));
END;

এখানে, অ্যাসোসিয়েটিভ অ্যারেটি VARCHAR2 টাইপের ইনডেক্স ব্যবহার করছে, অর্থাৎ E101, E102 ইত্যাদি স্ট্রিং ভ্যালু হিসেবে ইনডেক্স করা হচ্ছে।


Associative Arrays এর অন্যান্য কার্যাবলী:

  1. EXTEND Method:

    • এটি অ্যারের আকার বাড়ানোর জন্য ব্যবহৃত হয়।
    employees.EXTEND(2);  -- This adds 2 more elements to the array
    
  2. DELETE Method:

    • এটি নির্দিষ্ট একটি ইনডেক্স বা সমস্ত ইনডেক্সের জন্য ডেটা মুছে ফেলার জন্য ব্যবহার করা হয়।
    employees.DELETE(1);  -- Deletes the element at index 1
    employees.DELETE;     -- Deletes all elements in the array
    
  3. COUNT Method:

    • এটি অ্যারেতে মোট কতগুলো উপাদান রয়েছে তা দেখায়।
    DBMS_OUTPUT.PUT_LINE('Number of employees: ' || employees.COUNT);
    
  4. Exists Method:

    • এটি চেক করে যে কোন নির্দিষ্ট ইনডেক্সে কোনো ভ্যালু রয়েছে কিনা।
    IF employees.EXISTS(2) THEN
       DBMS_OUTPUT.PUT_LINE('Employee E102 exists');
    ELSE
       DBMS_OUTPUT.PUT_LINE('Employee E102 does not exist');
    END IF;
    

Associative Arrays এর ব্যবহারিক ক্ষেত্র:

  • Session-based data management: যদি কোন প্রোগ্রামে একাধিক ডেটা সেশন স্তরে ব্যবহৃত হয় তবে অ্যাসোসিয়েটিভ অ্যারে একটি আদর্শ পছন্দ হতে পারে।
  • Temporary data storage: যদি কোনো ডেটাবেসে কোনো প্রকারের তাত্ক্ষণিক ডেটা আপডেট বা সংগ্রহ করার প্রয়োজন হয়, তবে অ্যাসোসিয়েটিভ অ্যারে ব্যবহার করা যেতে পারে।
  • Index-based operations: যখন আপনাকে ডেটার সাথে ইনডেক্স ভিত্তিক এক্সেস করতে হবে, তখন অ্যাসোসিয়েটিভ অ্যারে সাহায্য করে।

সারাংশ:

  • Associative Arrays (বা Index-By Tables) PL/SQL এর একটি বিশেষ ধরনের সংগ্রহ যা key-value pair আকারে ডেটা সংরক্ষণ করে।
  • এটি dynamic size ধারণ করতে পারে, এবং ইনডেক্স ব্যবহার করে দ্রুত ডেটা এক্সেস করা সম্ভব।
  • VARCHAR2 বা BINARY_INTEGER ধরনের ইনডেক্স ব্যবহার করে এক্সেস করা হয়।
  • EXTEND, DELETE, COUNT, এবং EXISTS মত মেথডের মাধ্যমে অ্যারের ডেটা পরিচালনা করা যায়।
Content added By

Nested Tables এবং VARRAYS

182
182

PL/SQL-এ Nested Tables এবং VARRAYS (Variable-Size Arrays) হল দুইটি ধরনের collections (সমষ্টি), যা একাধিক মান (values) ধারণ করতে পারে। এগুলি ব্যবহার করে আপনি একাধিক ডেটা আইটেম সংরক্ষণ করতে পারেন এবং প্রোগ্রামিংয়ের মধ্যে বিভিন্ন ডেটা কাঠামো হিসেবে ব্যবহার করতে পারেন।

এখন আমরা বিস্তারিতভাবে Nested Tables এবং VARRAYS সম্পর্কে জানব।


১. Nested Tables (নেস্টেড টেবিল)

Nested Tables হল PL/SQL এর একটি collection ধরনের যা একাধিক মান ধারণ করতে পারে। এটি একটি ডায়নামিক সাইজ এর collection, এবং এটি একটি টেবিলের মতোই কাজ করে। Nested Table এর আকার পরিবর্তনযোগ্য এবং এটি তিনটি বৈশিষ্ট্য দ্বারা পরিচিত:

  • ডায়নামিক সাইজ: Nested Tables এর সাইজ runtime এ পরিবর্তিত হতে পারে।
  • টেবিল হিসাবে অ্যাক্সেস: Nested Table কে সাধারণ টেবিলের মতো ব্যবহার করা যায়।
  • প্রতিকৃতি: Nested Tables সাধারণত ছোট ডেটা সেগমেন্ট (বা sub-table) ধারণ করতে ব্যবহৃত হয়।

Nested Table এর বৈশিষ্ট্য:

  • এটি সরাসরি টেবিলের মতো একাধিক আইটেম ধারণ করতে সক্ষম।
  • এটি একসাথে একাধিক মান (values) ধারণ করতে পারে, যা সময়ে সময়ে বৃদ্ধি বা হ্রাস পেতে পারে।
  • সাধারণত টেবিলগুলির মধ্যে সম্পর্কের মতো ব্যবহৃত হয় (যেমন একটি বিভাগে অনেক কর্মচারী)।

Nested Table তৈরি এবং ব্যবহার:

DECLARE
    -- Nested Table type declaration
    TYPE EmployeeTableType IS TABLE OF VARCHAR2(100);

    -- Nested Table variable
    employee_names EmployeeTableType := EmployeeTableType('John', 'Jane', 'Mary');
BEGIN
    -- Adding new element to Nested Table
    employee_names.EXTEND;  -- Adds an empty slot at the end of the collection
    employee_names(employee_names.COUNT) := 'Mark';

    -- Displaying elements in Nested Table
    FOR i IN 1 .. employee_names.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE('Employee Name: ' || employee_names(i));
    END LOOP;
END;

এখানে:

  • EmployeeTableType হল একটি Nested Table Type, যা VARCHAR2 ডেটা ধারণ করে।
  • EXTEND ব্যবহার করা হয়েছে নতুন মান যোগ করার জন্য।
  • COUNT ব্যবহার করা হয়েছে টেবিলের বর্তমান সংখ্যা দেখানোর জন্য।

System Methods for Nested Tables:

  • EXTEND(n): Nested Table এ nটি নতুন সেল যোগ করে।
  • TRIM(n): Nested Table এর শেষ থেকে nটি সেল মুছে দেয়।
  • COUNT: Nested Table এর মধ্যে বর্তমান আইটেমের সংখ্যা প্রদান করে।

২. VARRAYS (Variable-Size Arrays)

VARRAYS হল PL/SQL এর একটি collection ধরনের যা নির্দিষ্ট আকারের array ধারণ করতে পারে। এটি একটি সীমাবদ্ধ সাইজের collection, অর্থাৎ এটি একটি নির্দিষ্ট সাইজ সীমা সহ একটি এলিমেন্ট ধারণ করে।

VARRAYS এর বৈশিষ্ট্য:

  • সীমাবদ্ধ সাইজ: VARRAYS একটি পূর্ব নির্ধারিত সীমার মধ্যে কাজ করে, অর্থাৎ এটি প্রাথমিকভাবে একটি নির্দিষ্ট আকার ধারণ করে এবং আপনি এটি runtime এ পরিবর্তন করতে পারবেন না।
  • ফিক্সড আকার: যখন আপনি একটি VARRAYS তৈরি করেন, তখন তার আকার নির্ধারণ করতে হবে, এবং এটি নির্দিষ্ট সংখ্যক মান ধারণ করতে সক্ষম হবে।
  • আরও ব্যবহারযোগ্য: সাধারণত যখন ডেটার পরিমাণ অল্প থাকে, এবং সাইজ পূর্বে নির্ধারিত থাকে, তখন VARRAYS ব্যবহার করা হয়।

VARRAYS তৈরি এবং ব্যবহার:

DECLARE
    -- VARRAY type declaration
    TYPE NumberArray IS VARRAY(5) OF NUMBER;

    -- VARRAY variable initialization
    num_array NumberArray := NumberArray(10, 20, 30, 40, 50);
BEGIN
    -- Displaying VARRAY elements
    FOR i IN 1 .. num_array.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE('Number: ' || num_array(i));
    END LOOP;
END;

এখানে:

  • NumberArray হল একটি VARRAY Type, যা NUMBER ডেটা ধারণ করে।
  • num_array হল VARRAYS এর একটি উদাহরণ, যার আকার ৫টি মান ধারণ করতে পারে।

System Methods for VARRAYS:

  • COUNT: VARRAYS এর মধ্যে উপস্থিত আইটেমের সংখ্যা প্রদান করে।
  • EXTEND(n): VARRAYS এ নতুন আইটেম যোগ করা যায় (যদি এর সাইজ পরিবর্তনযোগ্য হয়)।

Nested Table এবং VARRAYS এর মধ্যে পার্থক্য

বিষয়Nested TableVARRAYS
সাইজডায়নামিক সাইজ (runtime এ বৃদ্ধি বা হ্রাস হতে পারে)।ফিক্সড আকার (প্রাথমিকভাবে নির্ধারিত)।
পদ্ধতিএকাধিক আইটেম যোগ বা মুছে ফেলা যেতে পারে (যেমন EXTEND, TRIM)।সাইজ পূর্ব নির্ধারিত, তবে কিছু সীমিত পরিবর্তন করা যায়।
ব্যবহারবড় পরিমাণের বা সম্পর্কিত ডেটার জন্য ব্যবহৃত হয়।ছোট এবং সীমাবদ্ধ ডেটার জন্য ব্যবহৃত হয়।
ল্যাঙ্গুয়েজ সাপোর্টসিস্টেম টেবিলের মতো পরিচালনা করা যায়।কেবল একক আইটেমের সাথে কাজ করতে পারে।
ডেটা সংরক্ষণএকটি টেবিলের মতো (এটি ডাটাবেসে সংরক্ষণ করা যায়)।সাধারণত মেমোরিতে সীমাবদ্ধ থাকে।

সারাংশ:

  • Nested Tables হল একাধিক রেকর্ড ধারণ করতে সক্ষম ডায়নামিক collection। এটি সাইজ বৃদ্ধি বা হ্রাস করতে সক্ষম এবং সাধারণত বড় ডেটার জন্য ব্যবহৃত হয়।
  • VARRAYS হল এক সীমাবদ্ধ আকারের collection, যা কিছু সংখ্যক আইটেম ধারণ করে এবং তা পূর্বেই নির্ধারিত থাকে।

যখন আপনার collection এর সাইজের উপর নিয়ন্ত্রণ থাকতে হবে এবং ফিক্সড আকারের প্রয়োজন হবে, তখন VARRAYS ব্যবহার করবেন। তবে যখন collection এর সাইজ ডায়নামিকভাবে বৃদ্ধি বা হ্রাস পেতে পারে এবং সম্পর্কিত ডেটা ধারণ করতে হবে, তখন Nested Tables উপযুক্ত হবে।

Content added By

Collection Methods (EXTEND, DELETE, EXISTS ইত্যাদি)

124
124

PL/SQL তে Collections হল ডেটার একটি গ্রুপ বা অ্যারে যা একাধিক উপাদান ধারণ করতে পারে। এদের মধ্যে Associative Arrays, Nested Tables, এবং VARRAYs (ভেক্টর অ্যারে) অন্তর্ভুক্ত। এই কোলেকশনগুলির সাথে কাজ করার জন্য বিভিন্ন বিল্ট-ইন মেথড রয়েছে, যা কোলেকশনের ডেটা ম্যানিপুলেট করতে সাহায্য করে।

এখানে আমরা বেশ কিছু গুরুত্বপূর্ণ Collection Methods সম্পর্কে আলোচনা করব, যেমন EXTEND, DELETE, EXISTS ইত্যাদি।


১. EXTEND

  • বর্ণনা:
    EXTEND মেথডটি কোলেকশনের মধ্যে নতুন উপাদান যুক্ত করতে ব্যবহৃত হয়। এটি কোলেকশনটির আকার বৃদ্ধি করে এবং নতুন উপাদানগুলির জন্য স্থান তৈরি করে। এটি একাধিক উপাদান যুক্ত করার জন্যও ব্যবহার করা যেতে পারে।
  • ব্যবহার:
    • আপনি যদি এক বা একাধিক উপাদান কোলেকশনে যুক্ত করতে চান, তবে EXTEND ব্যবহার করতে পারেন।
    • এটি Associative Arrays, Nested Tables, এবং VARRAYs-এ কাজ করে।

উদাহরণ:

DECLARE
  TYPE number_table IS TABLE OF NUMBER;
  v_numbers number_table;
BEGIN
  -- কোলেকশনের আকার বাড়ানো
  v_numbers.EXTEND(3);  -- ৩টি নতুন স্থান যুক্ত হবে

  -- কোলেকশনের প্রথম তিনটি উপাদানে মান সেট করা
  v_numbers(1) := 10;
  v_numbers(2) := 20;
  v_numbers(3) := 30;

  -- ফলাফল প্রদর্শন
  FOR i IN 1..v_numbers.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE('Value: ' || v_numbers(i));
  END LOOP;
END;

এখানে EXTEND(3) কোলেকশনে তিনটি নতুন উপাদান স্থান তৈরি করেছে।


২. DELETE

  • বর্ণনা:
    DELETE মেথডটি কোলেকশন থেকে এক বা একাধিক উপাদান মুছে ফেলতে ব্যবহৃত হয়। এটি একটি নির্দিষ্ট উপাদান বা সমস্ত উপাদান মুছে দিতে পারে।
  • ব্যবহার:
    • আপনি যদি একটি নির্দিষ্ট উপাদান মুছে ফেলতে চান, তবে DELETE(index) ব্যবহার করতে পারেন।
    • আপনি যদি কোলেকশনের সমস্ত উপাদান মুছে ফেলতে চান, তবে DELETE ছাড়া কোন ইনডেক্স প্রদান না করে ব্যবহার করতে পারেন।

উদাহরণ:

DECLARE
  TYPE number_table IS TABLE OF NUMBER;
  v_numbers number_table;
BEGIN
  -- কোলেকশন তৈরী
  v_numbers := number_table(10, 20, 30, 40, 50);

  -- কোলেকশন থেকে প্রথম উপাদান মুছে ফেলা
  v_numbers.DELETE(1);

  -- কোলেকশন থেকে সমস্ত উপাদান মুছে ফেলা
  v_numbers.DELETE;  

  -- ফলাফল প্রদর্শন
  FOR i IN 1..v_numbers.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE('Value: ' || v_numbers(i));
  END LOOP;
END;

এখানে প্রথমে DELETE(1) ব্যবহার করে প্রথম উপাদান মুছে ফেলা হয়েছে এবং পরবর্তীতে DELETE ব্যবহার করে সমস্ত উপাদান মুছে ফেলা হয়েছে।


৩. EXISTS

  • বর্ণনা:
    EXISTS মেথডটি চেক করে যে একটি নির্দিষ্ট ইনডেক্সে কোলেকশনটি উপাদান ধারণ করছে কিনা। এটি একটি বুলিয়ান মান ফেরত দেয়:
    • TRUE: যদি কোলেকশনটি নির্দিষ্ট ইনডেক্সে উপাদান ধারণ করে।
    • FALSE: যদি কোলেকশনটি নির্দিষ্ট ইনডেক্সে উপাদান ধারণ না করে।
  • ব্যবহার:
    • এটি সাধারণত কোলেকশনের সীমা বা ইনডেক্সের জন্য চেক করার জন্য ব্যবহৃত হয়, বিশেষ করে যখন আপনি নিশ্চিত হতে চান যে কোনো নির্দিষ্ট ইনডেক্সে উপাদান রয়েছে কিনা।

উদাহরণ:

DECLARE
  TYPE number_table IS TABLE OF NUMBER;
  v_numbers number_table;
BEGIN
  -- কোলেকশন তৈরী
  v_numbers := number_table(10, 20, 30, 40, 50);

  -- চেক করা যে ৩য় ইনডেক্সে উপাদান আছে কিনা
  IF v_numbers.EXISTS(3) THEN
    DBMS_OUTPUT.PUT_LINE('Element at index 3: ' || v_numbers(3));
  ELSE
    DBMS_OUTPUT.PUT_LINE('No element at index 3');
  END IF;

  -- চেক করা যে ১০ম ইনডেক্সে উপাদান আছে কিনা
  IF v_numbers.EXISTS(10) THEN
    DBMS_OUTPUT.PUT_LINE('Element at index 10: ' || v_numbers(10));
  ELSE
    DBMS_OUTPUT.PUT_LINE('No element at index 10');
  END IF;
END;

এখানে প্রথমে ইনডেক্স ৩ এ একটি উপাদান রয়েছে কিনা তা চেক করা হয়েছে, এবং তারপর ইনডেক্স ১০ এর জন্য চেক করা হয়েছে, যা খালি থাকায় No element at index 10 দেখাবে।


৪. COUNT

  • বর্ণনা:
    COUNT মেথডটি কোলেকশনের বর্তমান উপাদানগুলির সংখ্যা প্রদান করে। এটি একটি ইনটিজার মান ফেরত দেয় যা কোলেকশনের উপাদান সংখ্যা নির্দেশ করে।
  • ব্যবহার:
    • এটি কোলেকশনের মোট উপাদানের সংখ্যা নির্ধারণ করতে ব্যবহৃত হয়।

উদাহরণ:

DECLARE
  TYPE number_table IS TABLE OF NUMBER;
  v_numbers number_table;
BEGIN
  -- কোলেকশন তৈরী
  v_numbers := number_table(10, 20, 30, 40);

  -- কোলেকশনের উপাদান সংখ্যা প্রদর্শন
  DBMS_OUTPUT.PUT_LINE('Total elements: ' || v_numbers.COUNT);
END;

এখানে v_numbers.COUNT কোলেকশনের উপাদান সংখ্যা (৪টি) প্রদান করবে।


৫. TRIM

  • বর্ণনা:
    TRIM মেথডটি কোলেকশনের শেষের থেকে একটি বা একাধিক উপাদান মুছে ফেলতে ব্যবহৃত হয়। এটি DELETE এর মতই, তবে এটি শুধু কোলেকশনের শেষ থেকে উপাদান মুছে ফেলবে।
  • ব্যবহার:
    • এটি কোলেকশনের শেষ থেকে নির্দিষ্ট সংখ্যক উপাদান মুছে ফেলতে ব্যবহৃত হয়।

উদাহরণ:

DECLARE
  TYPE number_table IS TABLE OF NUMBER;
  v_numbers number_table;
BEGIN
  -- কোলেকশন তৈরী
  v_numbers := number_table(10, 20, 30, 40, 50);

  -- কোলেকশনের শেষ থেকে ২টি উপাদান মুছে ফেলা
  v_numbers.TRIM(2);

  -- কোলেকশনের নতুন মান প্রদর্শন
  FOR i IN 1..v_numbers.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE('Value: ' || v_numbers(i));
  END LOOP;
END;

এখানে TRIM(2) কোলেকশনের শেষ থেকে দুটি উপাদান মুছে ফেলবে।


উপসংহার

PL/SQL তে কোলেকশনের সাথে কাজ করতে হলে বিভিন্ন মেথডের সাহায্য নিতে হয়। EXTEND, DELETE, EXISTS, COUNT, এবং TRIM এর মত মেথডগুলি কোলেকশনের ডেটা ম্যানিপুলেশন ও চেকিং এর জন্য গুরুত্বপূর্ণ। এই মেথডগুলির মাধ্যমে আপনি কোলেকশনগুলি আরও কার্যকরভাবে পরিচালনা করতে পারবেন।

Content added By
Promotion